＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝

                        PC-FXGAオーサリングソフトウェア
                    『ＧＭＡＫＥＲ』スタータキット(Ver.1.0)
                        ＡＣＤファイルフォーマットの解説

                                        日本電気ホームエレクトロニクス株式会社
                                                        １９９５年１１月１０日

＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝

目次

第１章  ACDファイル概要

第２章  ACD ファイルフォーマット
２．１  ファイルヘッダ (File Header)
２．１．１    acfilehdr_t 構造体
２．１．２    colormaphdr_t 構造体
２．２  カラーマップテーブル
２．２．１    colormaptbl_t 構造体

第３章  ACD ファイルのバイト整合
３．１  エンディアン
３．２  アライメント

第４章  データタイプ

＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝

第１章  ACDファイル概要

ACD ファイルは HuC6273 にて扱うカラーマップデータを定義します。

ACD ファイルはバイナリフォーマットにて提供されており、メモリに読み込み後簡単な
手続きにて FARL で取り扱うことが可能です。

このファイルでは ACDファイル構成の詳細な情報を提供します。

＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝

第２章  ACD ファイルフォーマット

ACD ファイルは以下の３種類の構造子からなります。

１）File Header         ファイルヘッダ
２）Colormap Table      カラーマップデータの集合を管理するデータの配置テーブル
３）Colormap Data Block カラーマップデータ

以下の図は、代表的な ACDファイルの構造を示します。

                +--------------------+
                |   File Header      |  64 bytes
                +--------------------+
                |  Colormap table1   |  40 * n bytes
                +--------------------+
                |  Colormap table2   |  40 * n bytes
                +--------------------+
                |Colormap Data Block1|  some bytes(64bit aligned)
                +--------------------+
                |Colormap Data Block2|  some bytes(64bit aligned)
                +--------------------+
                |                    |
                           :

■２．１  ファイルヘッダ (File Header)

ファイルヘッダは AGDファイル、AIDファイル、ACDファイルの各データファイルに共通
なヘッダ情報と、それぞれのファイルに固有なデータを含む64bytes の構造体のバイナ
リイメージです。

共通のヘッダ情報はマジックコードやバージョン情報、コメント等で構成され、 AID固
有の情報はイメージデータの名前やデータタイプ等で構成されます。

構造体の定義を以下に示します。


◆２．１．１  acfilehdr_t 構造体

typedef struct { /* 64 bytes */
/* Aurora common file header structure member  <48 bytes> */
	CARD8	magic_code[4];		/*  0..3 */
	CARD8	version[4];		/*  4..7 */
	CARD8 	tool_name[16];		/*  8..23 */
	CARD8 	comment[16];		/* 24..39 */
	CARD32	file_size;		/* 40..43 */
	CARD32	reserved0;		/* 44..47 */
/* Aurora tools characteristic structure member <16 bytes> */
	CARD8	acparam[16];		/* 48..63 */
} acfilehdr_t;


magiccode     ACDファイルを示す識別子
              <参考> 現在はそれぞれ以下のように定められています。

         AGDファイル == "AGD\0"
         AIDファイル == "AID\0"
         ACDファイル == "ACD\0"

version       ACD ファイルのフォーマット・バージョン
              4バイトの文字列で表し、バージョン情報は２桁10進の数字と１桁のアル
              ファベット、そして \0(NULL)で構成され、各桁はそれぞれリリース番号
              、バージョン、マイナー・バージョンを表し、現在は "20a\0"(2.0a)と
              なります。

tool_name     ACDファイルを作成したツールの名前を定義
              16バイトの文字列で表し、16バイト目には必ず \0(NULL)をおく必要があ
              り、このため tool_nameは最長15文字で構成されます。これに満たない
              場合は、残りを \0(NULL)で埋める必要があります。

comment       ACDファイルを作成した時に付けられたコメント
              16バイトの文字列で表し、で格納します。16バイト目には必ず \0(NULL)
              をおく必要があり、このため commentは最長15文字まで付けることがで
              きます。これに満たない場合は、残りを \0(NULL)で埋める必要がありま
              す。コメントがない場合は、16バイトすべてを \0(NULL)で埋めます。

file_size     ファイルに格納されているデータのサイズ（テーブル類も含む）
              ファイル全体のサイズからファイルヘッダのサイズを減じたものに一致
              します。

acparam        AGD/AID/ACDそれぞれ固有の情報が格納されます。

以上の 6つのメンバは AGD/AID/ACD共通です。

  
◆２．１．２  colormaphdr_t 構造体

この構造体は、前述のacfilehdr_t構造体のacparam領域に格納され、acfilehdr_t 構造
体の一部分として存在します。この構造体は、ポインターのサイズが、使用ホストによ
って異なるため、ファイル上では fcolormaphdr_t として定義され、メモリ上では fcol
ormaphdr_t として定義されます。

ファイル上の構造体
typedef struct { /* 16 bytes */
/* Aurora tools characteristic structure member <16 bytes> */
	CARD16	display_mode;		/* 48..49 */
	CARD16	reserved1;		/* 50..51 */
	CARD16	reserved2;		/* 52..53 */
	CARD16	colortbl_cnt;		/* 54..55 */
	CARD32	colortbl_addr;		/* 56..59 */
	CARD32	colortbl_size;		/* 60..63 */
} fcolormaphdr_t;


実メモリ上での構造体
typedef struct { 
/* Aurora tools characteristic structure member */
	CARD16	display_mode;
	CARD16	reserved1;
	CARD16	reserved2;
	CARD16	colortbl_cnt;
	void	*colortbl_addr;
	CARD32	colortbl_size;
} colormaphdr_t;


display_mode       ディスプレイモードの設定
                   この値の定義は、以下のようになります。
                   ACDファイルでは、意味を持ちません。

         AC_DISP_MODE_NRM    ノーマルモード
         AC_DISP_MODE_WDM    ワイドモード

colortbl_cnt      ヘッダーに直接リンクされているイメージテーブルの数
                  モデルテーブルは、階層構造を持っているため、ここに全てのモデ
                  ルテーブル数が入るわけではありません。直接リンクされるモデル
                  テーブルの数は最大 65535個になります。

colortbl_addr     acfilehdr_t 構造体の直後からのバイト数
                  通常は、この colorhdr_t 構造体の直後を指します。ただし、メモ
                  リ上の構造体として、展開されている時は、実際のアドレスを格納
                  し、colortbl_t 構造体を指すポインターとなります。

colortbl_size     ヘッダーに直接リンクされているモデルテーブルのサイズ
                  sizeof(colortbl_t) * colortbl_cntに一致します。


■２．２  カラーマップテーブル

この構造体は、モデルデータを階層的に持つために階層構造のリンクを可能としていま
す。この構造体は、ポインターのサイズが、使用ホストによって異なるため、ファイル
上では fcolormaptbl_t として定義され、メモリ上では colormaptbl_t として定義され
ます。


◆２．２．１  colormaptbl_t 構造体

ファイル上の構造体
typedef struct { /* 40 bytes */
	CARD8	color_type;		/*  0..0  */
	CARD8	reserved1;		/*  1..1  */
	CARD16	colormap_type;		/*  2..3  */
	CARD16	colormap_id;		/*  4..5  */
	CARD8	reserved2[16];		/*  6..21 */
	CARD16	ncolors;		/* 22..23 */
	CARD16	C_offset;		/* 24..25 */
	CARD16	I_offset;		/* 26..27 */
	CARD16	C_size;			/* 28..29 */
	CARD16	I_size;			/* 30..31 */
	CARD32	colormap_addr;		/* 32..35 */
	CARD32	colormap_size;		/* 36..39 */
} fcolormaptbl_t;

実メモリ上での構造体
typedef struct { 
	CARD8	color_type;
	CARD8	reserved1;
	CARD16	colormap_type;
	CARD16	colormap_id;
	CARD8	reserved2[16];
	CARD16	ncolors;
	CARD16	C_offset;
	CARD16	I_offset;
	CARD16	C_size;
	CARD16	I_size;
	void	*colormap_addr;
	CARD32	colormap_size;
} colormaptbl_t;


color_type         カラーマップデータのフォーマット
                   YUVやRGBなどのデータ形式や各ビットの定義などを指定します。

         ACD_COLOR_TYPE_YUV888         Y,U,V各8ビットの24ビットデータ
         ACD_COLOR_TYPE_YUV844         Y,U,V各8,4,4ビットの16ビットデータ
         ACD_COLOR_TYPE_RGB888         R,G,B各8ビットの24ビットデータ
         ACD_COLOR_TYPE_RGB555         R,G,B各5ビットの15ビットデータ

colormap_type      カラーマップのタイプ
                   この値の定義は、以下のようになります。

         AC_CMAP_TYPE_INDEX9            9ビット・インデックスモード
         AC_CMAP_TYPE_INDEX12          12ビット・インデックスモード
         AC_CMAP_TYPE_I3C6             I=3bit,C=6bit・ICモード
         AC_CMAP_TYPE_I4C5             I=4bit,C=5bit・ICモード
         AC_CMAP_TYPE_I5C4             I=5bit,C=4bit・ICモード
         AC_CMAP_TYPE_I6C3             I=6bit,C=3bit・ICモード
         AC_CMAP_TYPE_I6C6             I=6bit,C=6bit・ICモード

ncolors            カラーマップデータが保持するカラーエントリー数

C_offset           ICモードに基づき、このカラーマップデータがインストールされる
                   先頭のCの座標値

I_offset           ICモードに基づき、このカラーマップデータがインストールされる
	           先頭のIの座標値
	           インデックスモードの場合は、このデータは、意味を持ちません。

C_size             ICモードに基づき、このカラーマップデータがインストールされる
	           Cの座標幅

I_size             ICモードに基づき、このカラーマップデータがインストールされる
	           Iの座標幅を示します。インデックスモードの場合は、このデータ
	           は、意味を持ちません。

colormap_addr      カラーマップデータの開始アドレス
                   acfilehdr_t 構造体の直後からのバイト数で表します。ただし、メ
                   モリ上の構造体として、展開されている時は、実際のアドレスを格
                   納し、イメージデータを指すポインターとなります。

colormap_size      カラーマップデータの大きさをバイト数で示します。

＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝

第３章  ACD ファイルのバイト整合

■３．１  エンディアン

ACD ファイルはリトルインディアンのバイナリ形式で提供されます。
１つのデータの MSB (Most Significant Bit) は最上位バイト目に、LSB (Little Signi
ficant bit)は 0バイト目に現れます。

つまり、32bit のデータ（4byte のデータ）は

    MSB(31bit)                          LSB(0bit)
     +--------+--------+--------+--------+
     |7  ..  0|7  ..  0|7  ..  0|7  ..  0|
     +--------+--------+--------+--------+
          3        2        1        0 (byte)

といった順番に並び、 12345678(Hex)というデータはバイト順に78、56、34、12となり
ます。


■３．２  アライメント

ヘッダ、テーブル、データの開始位置は 64bit alignmentでなくてはなりません。

例えば、あるデータが 6バイト分のデータの場合、続くデータは2バイト分空けて開始し
なくてはいけません。

  悪い例：      addr. +0 +1 +2 +3 +4 +5 +6 +7
                0000  <-- 1st data ---> <----
                0008  --- 2nd data ------> <-
                0010  --- 3rd data ---> <----

  良い例：      addr. +0 +1 +2 +3 +4 +5 +6 +7
                0000  <-- 1st data ---> 00 00
                0008  <-- 2nd data ----------
                0010  -> 00 00 00 00 00 00 00
                0018  <-- 3rd data ------> 00

＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝

第４章  データタイプ

ACDファイルで使われるデータタイプは、actype.hで規定されています。
データタイプの定義は以下のようになります。

         CARD8           8 bit 符号なし整数
         CARD16         16 bit 符号なし整数
         CARD32         32 bit 符号なし整数
         CARD64         64 bit 符号なし整数 (ACDでは使用しません）
         CARDF32        32 bit IEEE 実数形式 (ACDでは使用しません）

コンパイラの違いなどにより、それぞれの定義が異なりますので注意が必要で
す。

＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝

                                                           (C)1995 HUDSON SOFT
                                                           (C)1995 KUBOTA CORP.

